package com.xcm.service;

import com.xcm.exception.ServiceException;
import com.xcm.model.SysRole;
import com.xcm.model.vo.SysRoleVo;
import com.xcm.page.PageInfo;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

/**
 * 角色业务
 *
 * @author 林强
 * @date 2018-04-12 11:15
 */
public interface SysRoleService extends BaseService<SysRole> {

    /**
     * 根据id查询
     *
     * @param roleId 角色id
     * @return
     */
    SysRoleVo getByIdVo(Integer roleId) throws Exception;

    /**
     * 列表分页
     *
     * @param paramMap 参数
     * @param pageNum  第几页
     * @param pageSize 每页几条
     * @return
     */
    PageInfo<SysRole> listPage(Map<String, Object> paramMap, Integer pageNum, Integer pageSize);

    /**
     * 新增角色(同时绑定权限)
     *
     * @param sysRole      新增的角色对象
     * @param authorityIds 权限id(多个以英文逗号隔开)
     */
    int save(SysRole sysRole, String authorityIds);

    /**
     * 新增角色并返回
     *
     * @param sysRole 新增的角色对象
     */
    SysRole saveAndGetId(SysRole sysRole);

    /**
     * 更新角色(同时绑定权限)
     *
     * @param sysRole      新增的角色对象
     * @param authorityIds 权限id(多个以英文逗号隔开)
     */
    int update(SysRole sysRole, String authorityIds);

    /**
     * 判断角色是否能删除
     *
     * @param roleId 角色id
     * @return
     */
    boolean canDelete(Integer roleId);

    /**
     * 给角色添加用户
     *
     * @param roleId  角色id
     * @param userIds 用户id(多个以英文逗号隔开)
     */
    int saveUserForRole(Integer roleId, String userIds) throws ServiceException;

    /**
     * 查询集合
     *
     * @param paramMap 参数map
     * @return
     */
    List<SysRole> list(Map<String, Object> paramMap);

    /**
     * 根据用户id查询角色集合
     *
     * @param userId
     * @return
     */
    List<SysRole> listByUserId(Integer userId);

    /**
     * 批量删除角色
     *
     * @param roleIdList
     * @return
     */
    int batchDeleteRole(List<Integer> roleIdList) throws ServiceException;

    /**
     * 批量启用或停用角色
     *
     * @param roleIdList 启用或停用的角色id集合
     * @param able       启用或停用(1启用，0停用)
     * @return
     */
    int batchEnableOrDisableRole(List<Integer> roleIdList, String able);
}
